草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - C 中快速复制的模式

我曾经看到一个编程模式(不是设计),如何实现缓冲区的快速复制。它包括一个交错的循环和开关。问题是,它大部分时间复制4个字节,只有缓冲区的最后几个字节使用较小的数据类型复制。谁能告诉我它的名字?它以一个人的名字命名。它是用C语言完成的,编译器输出几乎是最佳的。 最佳答案 使用memcpy(),它是标准的、可移植的,并且在许多情况下也经过了很好的优化。 关于c++-C中快速复制的模式,我们在StackOverflow上找到一个类似的问题: https://stac

C++数组问题

我想初始化一个大小为200的double组,它的值是从0到199,在C++中从索引0到199。我知道我可以通过一个简单的For循环来完成,但是有没有办法像这样初始化double组?谢谢 最佳答案 不是真的。for循环是您的最佳选择:doublearray[200];for(inti=0;i(i); 关于C++数组问题,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3243762/

c++ - C中的结构继承

在标准C或C++中是否可以继承另一个结构? 最佳答案 你可以在另一个结构中嵌入一个结构来模拟C中的继承:typedefstruct{inti;}base;voidbasefunc(base*b);typedefstruct{baseb;charc;}extended;extendede;/*Initialiseextendedhere*/basefunc(&e.b);/*Usethetypechecker*/basefunc((base*)&e);/*Justmakesureyouknowwhatyou'redoing*/

c++ - C/C++ `!a` 与 `a==0`

当我有一个整数或一个指针a时,事实证明两者都是!a和a==0具有相同的行为。在非常低的水平上,在计算速度方面是否存在一些差异? 最佳答案 性能上不太可能存在差异,因为编译器知道逻辑等价性,因此它们没有理由不能为两者发出相同的代码。等价性是基本的,而不是一些巧妙的定理:!a的含义对于标准中定义的整数类型是“a的值等于0”(或者严格地说,正如James指出的那样,“不是(a的值不是0)”),而!a对指针类型的意义是“a是一个空指针”(或者严格来说“不是(a的值是一个非空指针)”)。但是,没有要求编译器必须为两者发出相同的代码,因此C或C

c++ - Windows C 代码的内存分配

我想知道在WindowsC编程中推荐使用哪种方法:使用malloc或Win32HeapAlloc(也许是VirtualAlloc?)函数。我已阅读MSDNMemoryManagementFunctionsarticle和MSDN上关于malloc和HeapAlloc的文章,但他们没有说应该使用哪一个以及在什么情况下。 最佳答案 坚持使用malloc,除非你有令人信服的理由使用不同的东西。它将根据操作系统内存分配原语在底层实现,但您自己深入到该层并没有真正的优势。我认为一些API调用需要从Windows堆中分配内存块,但当您遇到它们时

c++ - Windows 上的 C 编译器之间的实际区别是什么?

用VisualC/C++2005/2008编写的程序可能无法用其他编译器(例如GNUC/C++)编译,反之亦然。例如,当尝试重用使用windows.h的代码时,为特定编译器编写的代码与另一个编译器一起使用时,需要注意哪些区别?是否有任何关于如何生成与一个编译器或另一个编译器兼容的代码的信息,例如使用GC/C++或MSVC/C++?尝试这样做会导致什么问题?LCC和DigitalMars等其他编译器呢? 最佳答案 尝试将为MSVC编写的代码编译为其他编译器时,要做的第一件事是在关闭Microsoft扩展的情况下进行编译。(我认为使用/

c++ - gcc 编译无效的 C 代码

我的一些C程序没有按预期工作。例如,通过引用传递在C中是不可能的,但是当我编写一个使用它的C程序并使用gcc编译它时它工作正常。gcc是C++编译器吗?如何使其表现得像C编译器? 最佳答案 gcc、g++和其他前端使用文件名来确定语言。例如,gcc和g++之间唯一的主要区别是对新的C++程序员的影响:不同的链接设置(针对C++stdlib)。如果您的文件被误检测,请使用-x选项(也可能是-std)明确指定。或者遵循gcc对文件名使用的通用命名约定。对于C,这意味着*.c。仔细检查您没有使用大写/大写*.C来命名您的文件;被检测为C+

c++ - 重复文字和硬编码

我经常看到以下模式:b->last=ngx_cpymem(b->last,"",sizeof("")-1);请注意,文字字符串被使用了两次。摘录来自nginx源代码库。编译器应该能够在编译单元中遇到这些字面量时进行合并。我的问题是:在编译单元中遇到商业级编译器(VC++、GCC、LLVM/Clang)时是否会删除这种冗余?(静态)链接器在链接目标文件时是否删除了此类冗余。如果2适用,这种优化会在动态链接期间发生吗?如果1和2适用,它们是否适用于所有文字。这些问题很重要,因为它允许程序员在不损失效率的情况下变得冗长——即,考虑将巨大的静态数据模型硬连接到程序中(例如,决策支持系统的规则在

c++ - C 或 C++ 编写编译器?

我想为自定义标记语言编写一个编译器,我想获得最佳性能,我还想拥有良好的可扩展性设计。多范式编程语言(C++)更适合实现现代designpatterns,但我认为这会稍微降低性能(例如考虑RTTI),这或多或少可能会使C成为更好的选择。我想知道如果有人想创建一个快速、高效和良好的现代编译器(在遵守现代软件工程原则的意义上),什么是最好的语言(C、C++甚至objective-c)设计。 最佳答案 C++的“昂贵”功能(例如异常、虚函数、RTTI)根本不存在于C中。当您在C中模拟它们时,您可能最终得到至少同样昂贵的东西就像在C++中一样

c++ - 如何判断传入的数组是一维、二维还是N维数组

我想编写一个接受数组作为输入参数的函数。该函数应打印数组的所有元素。print_array(arr){//printalltheelemntsofarr.}我不知道该怎么做。我想首先我们需要找出传递的数组是一维还是二维还是三维等等……数组因为,要打印以下元素:1-Darray,youneedonly1forloop.2-Darray,youneedonly2forloop.3-Darray,youneedonly3forloop.但是,我不知道您将如何确定它是一维、二维还是N维数组。请帮忙。 最佳答案 实际上,您可以很容易地找出确切